# _*_conding:cp-1252-*-
# 教育机构：银杰教育
# 讲师：李伟
# 开发时间：2025/8/30 下午9:59
"""
断言：对结果进行判断  --assert
1、assert actural == expected  ， 前面的是执行结果，后面的预期结果
2、如果这个表达式成立的actural == expected 结果True，断言成功的；--测试用例通过的
3、否则断言失败的，抛出错误 =AssertionError，后续的代码不会执行  -- 测试用例执行失败的 【分析】
  - 如果有多条测试用例，一条失败了 抛出异常，后续用例执行么？== 默认 不会执行
  - 如果希望后续的用例继续执行，借助测试框架-pytest 单独执行的。+ 数据驱动
4、默认没有详细的报错信息，但是可以手动加备注信息 ==备注信息 显示在断言失败的后面。

案例：自动化测试：执行测试用例要进行断言的【预期结果 vs 执行结果】
  -- 一致--断言通过，测试用例通过的；
  -- 不一致，断言失败，测试用例执行不通过的 【项目的bug 或者代码的bug】== 异常：AssertionError
    -- 如果失败的用例，我们自动化框架要处理【异常捕获】，记录错误日志，方便定位问题，提价bug或者修复框架bug
    -- 项目测试报告里会记录这条是失败的用例么？不会的，导致测试报告的结果统计不准确的。
      - 所以希望结果： 捕获完成后 记录日志； 然后抛出这个断言失败的错误，方便测试报告结果统计。--raise
"""

# 初级断言
# actural = 5
# expected = 6
# if actural == expected:
#     print("断言成功，测试用例通过！")
# else:
#     print("断言失败，测试用例不通过！")

# 专业的断言方式--assert
# actural = 5
# expected = 6
# assert actural == expected,"断言失败，5!=6"  # 备注信息 显示在断言失败的后面
# assert actural == expected,f"断言失败 {actural}!= {expected}"  #s失败会显示备注的错误信息，成功不打印。
#
# # # 不会运行这行代码
# print("running")

# 断言错误的异常捕获+ raise主动抛出异常 【在测试结果里显示是失败】
from tools.handle_logs import logger
actural = 5
expected = 8
try:
    assert actural == expected ,"断言失败，5!=6"
except AssertionError as err:
    logger.info(f"断言失败了{err}")  # 这行记录日志  print代替日志记录
    # raise err
finally :
    print(f"恭喜断言成功{actural}=={expected}")

#解释： 因为try except捕获了AssertionError as err:会继续往下处理，处理到了raise err，然后才把错误给抛出，后续代码不在执行。
# 这样的好处在于，由于AssertionError类型不对，导致 无法正常捕获，raise兜底打印。

# 小结
# 1、断言后面可以添加备注信息，便于查看。,""
# 2、多条用例同时执行，有一条异常。希望不会影响后续用例执行。所以try except 处理断言。